package org.example.api;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.*;

@RestController
@RequestMapping("/hello")
public class hello {
    @GetMapping("/m1")
    public Object m1(String name,String sex){
        return "hello"+name+sex;
    }

    @PostMapping("m2")
    public Object m2(String name,String sex){
        return "hello:"+name+","+sex;
    }


    @Value("${local.file.path}")
    String localFilePath;

    @PostMapping("/m3")
    public Object m3 (MultipartFile file) {
        // 创建一个哈希表, 用于返回结果
        Map map = new HashMap();
        // 1.获取目标文件的大小, 用long类型存储size
        long size = file.getSize();
        // 假设限制文件最大不能超过10MB
        if (size > 1024 * 1024 * 10) {
            map.put("code", "-1");
            map.put("message", "文件太大, 不能超过10MB");
            return map;
        }
        // 2. 获取目标文件的原名
        String fileName = file.getOriginalFilename();
        // 截取出文件名的扩展名 (从最后一个.开始截取)
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 定义一个支持的文件格式集合 (假设只支持.pdf | .xls | .xlsx三种格式的文件)
        List<String> supportSuffix = Arrays.asList(".pdf", ".xls", ".xlsx");
        // 判断目标文件的格式是否在支持的范围中, 用!取反
        if (!supportSuffix.contains(suffix)) {
            map.put("code", "-1");
            map.put("message", "文件格式不支持");
            return map;
        }
        // 3. 用UUID生成一个全局唯一的文件名, 并去除"-", 转全大写形式
        String uuid = UUID.randomUUID().toString()
                .replace("-", "").toUpperCase();
        // 4. 拼接UUID和原文件的扩展名, 得到新的文件名
        fileName = uuid + suffix;
        // 5. 用配置文件中的路径创建一个文件夹对象
        File folder = new File(localFilePath);
        // 判断文件夹是否存在
        if (!folder.exists()) {
            // 如果文件夹不存在, 手动创建此文件夹
            folder.mkdirs();
        }
        // 6. 用新的文件名创建一个本地文件, 并指定其文件夹
        File localFile = new File(localFilePath, fileName);
        try {
            // 7. 把网络文件落地存储到本地文件中
            file.transferTo(localFile);
            map.put("code", "1");
            map.put("message", fileName);
        } catch (IOException e) {
            map.put("code", "-1");
            map.put("message", "文件上传失败!");
        }
        return map;
    }
}
